package com.laboratory.manage.controller;

import com.laboratory.manage.entity.CarouselEntity;
import com.laboratory.manage.service.CarouselService;
import com.laboratory.manage.utils.PageUtils;
import com.laboratory.manage.utils.R;
import com.laboratory.manage.utils.UploadImageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Arrays;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: qinaolong
 * @Date: 2023/05/29/10:09
 * @Description:
 */
//@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/webapp/carousel")
public class CarouselController {

    @Autowired
    private CarouselService carouselService;

    /**
     * 新增轮播图信息
     * @param request
     * @param title
     * @param mark
     * @param file
     * @param type
     * @return
     * @throws Exception
     */
    @RequestMapping("/save")
    public R upload(HttpServletRequest request,
                    @RequestParam("title") String title,
                    @RequestParam("mark") String mark,
                    @RequestParam("file") MultipartFile file,
                    @RequestParam("type") String type) throws Exception {

        //判断是否上传了图片
        if(file.isEmpty()){
            return R.error(14000, "上传图片不能为空");
        }

        //获取文件基本信息
        //获取正在处理的文件的原始文件名
        String originalFilename = file.getOriginalFilename();

        //通过将当前系统时间（以毫秒为单位）附加到原始文件名上生成一个新的文件名,这样做可以确保文件名的唯一性。
        String newName =  System.currentTimeMillis() + originalFilename;

        File uploadImage = UploadImageUtils.UploadImage(file, type);

        //将上传的文件保存到新的路径里面，图片名字为新生成的名字
        file.transferTo(new File(uploadImage, newName));

        //创建一个新的轮播图实体类
        CarouselEntity carouselEntity = new CarouselEntity();
        carouselEntity.setTitle(title);
        carouselEntity.setMark(mark);
        carouselEntity.setImages("uploadImages/" + type + "/" + newName);

        //保存这个实体类
        if(carouselService.save(carouselEntity)){
            return R.ok().put("data", carouselEntity);
        }
        return R.error(14000, "上传失败");
    }

    /**
     * 批量删除轮播图
     * @param ids
     * @return
     */
    @RequestMapping("/delete")
    public R delete (@RequestBody Long[] ids){
        if(carouselService.delete(Arrays.asList(ids))){
            return R.ok();
        }else {
            return R.error(14000, "删除失败");
        }
    }

    @RequestMapping("/update")
    public R update(HttpServletRequest request,
                    @RequestParam("id") String id,
                    @RequestParam("title") String title,
                    @RequestParam("mark") String mark,
                    @RequestParam("file") MultipartFile file,
                    @RequestParam("type") String type,
                    @RequestParam("status") String status) throws Exception{

        //根据拿到的id，寻找实体类
        CarouselEntity carouselEntity = carouselService.getById(id);

        if(carouselEntity == null){
            //说明没找到这个实体类
            return R.error(14000, "修改失败");
        }

        //判断是否更改了图片
        if(file != null){
            //说明更改了图片，那就先保存这个图片
            //获取文件基本信息
            //获取正在处理的文件的原始文件名
            String originalFilename = file.getOriginalFilename();

            //通过将当前系统时间（以毫秒为单位）附加到原始文件名上生成一个新的文件名,这样做可以确保文件名的唯一性。
            String newName =  System.currentTimeMillis() + originalFilename;

            //调用上传图片的工具类的方法
            File uploadImage = UploadImageUtils.UploadImage(file, "member");

            file.transferTo(new File(uploadImage, newName));

            //设置图片保存的路径
            carouselEntity.setImages("uploadImages/" + "member" + "/" + newName);
        }

        carouselEntity.setMark(mark);

        carouselEntity.setTitle(title);

        carouselEntity.setStatus(status);

        //调用更新方法，更新这个图片
        boolean update = carouselService.update(carouselEntity);
        if(update){
            return R.ok();
        }
        return R.error();
    }

    /**
     * 返回表中所有数据
     * @return
     */
    @GetMapping("/allList")
    public R allList(){
        return R.ok().put("data", carouselService.allList());
    }

    /**
     * 分页展示所有成员
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = carouselService.queryPage(params);

        return R.ok().put("data", page);
    }
}
